package com.edu.dk.security.context;

import java.util.Map;

/**
 * 普通的上下文接口，不支持多层嵌套
 * 
 * 
 */
public interface BaseContext {
	/**
	 * 添加到上下文
	 * 
	 * @param name
	 * @param object
	 */
	<T> T put(String name, T object);

	/**
	 * 把上下文中某键值的名字换成另外的名字
	 * 
	 * @param key
	 * @param newKey
	 * @return
	 */
	boolean renameKey(String key, String newKey);

	/**
	 * 遍历所有上下文并删除找到的第一个
	 * 
	 * @param name
	 * @return
	 */
	<T> T remove(String name);

	/**
	 * 上下文中获取对象
	 * 
	 * @param name
	 * @return
	 */
	<T> T get(String name);

	/**
	 * 放入多个键值对到上下文
	 * 
	 * @param map
	 */
	void putAll(Map<String, Object> map);

	/**
	 * 上下文中获取对象，获取不到返回指定的默认值
	 * 
	 * @param name
	 * @param defaultValue
	 *            默认值
	 * @return
	 */
	<T> T get(String name, T defaultValue);

	/**
	 * 上下文大小
	 * 
	 * @return
	 */
	int size();

	/**
	 * 检测上下文中是否存在某键值
	 * 
	 * @param name
	 * @return 返回是否存在
	 */
	boolean exist(String name);

	/**
	 * 删除上下文中的所有内容
	 */
	void clear();

	/**
	 * 返回上下文中所有内容
	 * 
	 * @return
	 */
	Map<String, Object> getItemMap();

}